import java.util.Arrays;

/**
 * Created by L.jp
 * Description:小红的数组构造，构造一个大小是( n*(n+1))/2的数组，有1个1，2个2，…，n个n，且任意两个相邻元素不相等
 * User: 86189
 * Date: 2023-04-20
 * Time: 23:18
 */
public class Solution {
        //这题其实不用那么复杂，直接构造简单的数组即可，比如n=3,那么数组就是1个1,2个2,3个3，那么就可以这样构造[3,1,2,3,2,3]
        //这样既保证了个数又使得任意的两个相邻的元素不相等，
        //思路：我们可以看成构造n轮数组，每一轮构造数组的起点不一样
        //     首先构建数组，让arr[0]=n,然后定义i遍历arr数组，定义j来完成几个几的构造，定义start代表每一轮构造数组的起点，初始值就是下标1的位置
        //     一开始j=1,那么arr[i]=j，就完成了arr[1]=1,这是第二个元素的构造
        //     然后j++, 当j>n时代表一轮数组构造完毕，让start+1，代表下一轮构造数组的起点，然后j=start,又重新开始构造
        public static int[] fun (int n) {
            int[] arr=new int[n*(n+1)/2];
            int len=arr.length;
            //第一轮数组就构造一个元素，为n本身
            arr[0]=n;
            //从下标1的位置开始构造第二轮数组
            int j=1;
            //构造数组的起点位置，直接从第二个元素开始构造
            int start=1;
            for(int i=1;i<len;i++){
                //每一轮构造都可以构造顺序数组
                arr[i]=j++;  //先使用上一个j的值然后++
                //如果又一轮数组构造完毕，那么就到下一轮数组构造
                if(j>n){
                    //让构造上一轮数组构造的起点+1，表示下一轮数组的起点
                    start+=1;
                    j=start;
                }
            }
            return arr;
        }
        
        public static void main(String[] args) {
            System.out.println(Arrays.toString(fun(5)));
        }
    }

